#include "LinearMath/btMatrix3x3.h"
#ifdef __cplusplus
extern "C" {
#endif
btMatrix3x3FloatData* bullet_NewbtMatrix3x3FloatData(){
	btMatrix3x3FloatData* wrap_out = new btMatrix3x3FloatData();
	return wrap_out;
}

btVector3FloatData** bullet_btMatrix3x3FloatData_GetFieldOfM_el(btMatrix3x3FloatData* c_this){
	return (btVector3FloatData**)(&c_this->m_el);
}

btMatrix3x3DoubleData* bullet_NewbtMatrix3x3DoubleData(){
	btMatrix3x3DoubleData* wrap_out = new btMatrix3x3DoubleData();
	return wrap_out;
}

btVector3DoubleData** bullet_btMatrix3x3DoubleData_GetFieldOfM_el(btMatrix3x3DoubleData* c_this){
	return (btVector3DoubleData**)(&c_this->m_el);
}

btMatrix3x3* bullet_NewbtMatrix3x3(){
	btMatrix3x3* wrap_out = new btMatrix3x3();
	return wrap_out;
}

btMatrix3x3* bullet_NewbtMatrix3x31(btQuaternion* q){
	btQuaternion const& c_arg_q=(btQuaternion const&)(*q);
	btMatrix3x3* wrap_out = new btMatrix3x3(c_arg_q);
	return wrap_out;
}

btMatrix3x3* bullet_NewbtMatrix3x32(double* xx,double* xy,double* xz,double* yx,double* yy,double* yz,double* zx,double* zy,double* zz){
	btScalar const& c_arg_xx=(btScalar const&)(*xx);
	btScalar const& c_arg_xy=(btScalar const&)(*xy);
	btScalar const& c_arg_xz=(btScalar const&)(*xz);
	btScalar const& c_arg_yx=(btScalar const&)(*yx);
	btScalar const& c_arg_yy=(btScalar const&)(*yy);
	btScalar const& c_arg_yz=(btScalar const&)(*yz);
	btScalar const& c_arg_zx=(btScalar const&)(*zx);
	btScalar const& c_arg_zy=(btScalar const&)(*zy);
	btScalar const& c_arg_zz=(btScalar const&)(*zz);
	btMatrix3x3* wrap_out = new btMatrix3x3(c_arg_xx,c_arg_xy,c_arg_xz,c_arg_yx,c_arg_yy,c_arg_yz,c_arg_zx,c_arg_zy,c_arg_zz);
	return wrap_out;
}

btMatrix3x3* bullet_NewbtMatrix3x33(btMatrix3x3* other){
	btMatrix3x3 const& c_arg_other=(btMatrix3x3 const&)(*other);
	btMatrix3x3* wrap_out = new btMatrix3x3(c_arg_other);
	return wrap_out;
}

btMatrix3x3* bullet_NewbtMatrix3x34(btVector3* v0,btVector3* v1,btVector3* v2){
	btVector3 const& c_arg_v0=(btVector3 const&)(*v0);
	btVector3 const& c_arg_v1=(btVector3 const&)(*v1);
	btVector3 const& c_arg_v2=(btVector3 const&)(*v2);
	btMatrix3x3* wrap_out = new btMatrix3x3(c_arg_v0,c_arg_v1,c_arg_v2);
	return wrap_out;
}

btMatrix3x3* bullet_btMatrix3x3_absolute(btMatrix3x3* c_this){
	btMatrix3x3 c_out = c_this->absolute();
	btMatrix3x3* wrap_out = new btMatrix3x3(c_out);
	return wrap_out;
}

btMatrix3x3* bullet_btMatrix3x3_adjoint(btMatrix3x3* c_this){
	btMatrix3x3 c_out = c_this->adjoint();
	btMatrix3x3* wrap_out = new btMatrix3x3(c_out);
	return wrap_out;
}

double bullet_btMatrix3x3_cofac(btMatrix3x3* c_this,int r1,int c1,int r2,int c2){
	int c_arg_r1=r1;
	int c_arg_c1=c1;
	int c_arg_r2=r2;
	int c_arg_c2=c2;
	btScalar c_out = c_this->cofac(c_arg_r1,c_arg_c1,c_arg_r2,c_arg_c2);
	double wrap_out = (c_out);
	return wrap_out;
}

void bullet_btMatrix3x3_deSerialize(btMatrix3x3* c_this,btMatrix3x3DoubleData* dataIn){
	btMatrix3x3DoubleData const& c_arg_dataIn=(btMatrix3x3DoubleData const&)(*dataIn);
	c_this->deSerialize(c_arg_dataIn);
}

void bullet_btMatrix3x3_deSerializeDouble(btMatrix3x3* c_this,btMatrix3x3DoubleData* dataIn){
	btMatrix3x3DoubleData const& c_arg_dataIn=(btMatrix3x3DoubleData const&)(*dataIn);
	c_this->deSerializeDouble(c_arg_dataIn);
}

void bullet_btMatrix3x3_deSerializeFloat(btMatrix3x3* c_this,btMatrix3x3FloatData* dataIn){
	btMatrix3x3FloatData const& c_arg_dataIn=(btMatrix3x3FloatData const&)(*dataIn);
	c_this->deSerializeFloat(c_arg_dataIn);
}

double bullet_btMatrix3x3_determinant(btMatrix3x3* c_this){
	btScalar c_out = c_this->determinant();
	double wrap_out = (c_out);
	return wrap_out;
}

void bullet_btMatrix3x3_diagonalize(btMatrix3x3* c_this,btMatrix3x3* rot,double threshold,int maxSteps){
	btMatrix3x3& c_arg_rot=(btMatrix3x3&)(*rot);
	btScalar c_arg_threshold=threshold;
	int c_arg_maxSteps=maxSteps;
	c_this->diagonalize(c_arg_rot,c_arg_threshold,c_arg_maxSteps);
}

void bullet_btMatrix3x3_extractRotation(btMatrix3x3* c_this,btQuaternion* q,double tolerance,int maxIter){
	btQuaternion& c_arg_q=(btQuaternion&)(*q);
	btScalar c_arg_tolerance=tolerance;
	int c_arg_maxIter=maxIter;
	c_this->extractRotation(c_arg_q,c_arg_tolerance,c_arg_maxIter);
}

btVector3* bullet_btMatrix3x3_getColumn(btMatrix3x3* c_this,int i){
	int c_arg_i=i;
	btVector3 c_out = c_this->getColumn(c_arg_i);
	btVector3* wrap_out = new btVector3(c_out);
	return wrap_out;
}

void bullet_btMatrix3x3_getEulerYPR(btMatrix3x3* c_this,double* yaw,double* pitch,double* roll){
	btScalar& c_arg_yaw=(btScalar&)(*yaw);
	btScalar& c_arg_pitch=(btScalar&)(*pitch);
	btScalar& c_arg_roll=(btScalar&)(*roll);
	c_this->getEulerYPR(c_arg_yaw,c_arg_pitch,c_arg_roll);
}

void bullet_btMatrix3x3_getEulerZYX(btMatrix3x3* c_this,double* yaw,double* pitch,double* roll,unsigned int solution_number){
	btScalar& c_arg_yaw=(btScalar&)(*yaw);
	btScalar& c_arg_pitch=(btScalar&)(*pitch);
	btScalar& c_arg_roll=(btScalar&)(*roll);
	unsigned int c_arg_solution_number=solution_number;
	c_this->getEulerZYX(c_arg_yaw,c_arg_pitch,c_arg_roll,c_arg_solution_number);
}

btMatrix3x3* bullet_btMatrix3x3_getIdentity(btMatrix3x3* c_this){
	btMatrix3x3 const& c_out = c_this->getIdentity();
	btMatrix3x3* wrap_out = (btMatrix3x3*)(&c_out);
	return wrap_out;
}

void bullet_btMatrix3x3_getOpenGLSubMatrix(btMatrix3x3* c_this,double* m){
	btScalar * c_arg_m=(btScalar *)(void*)(m);
	c_this->getOpenGLSubMatrix(c_arg_m);
}

void bullet_btMatrix3x3_getRotation(btMatrix3x3* c_this,btQuaternion* q){
	btQuaternion& c_arg_q=(btQuaternion&)(*q);
	c_this->getRotation(c_arg_q);
}

btVector3* bullet_btMatrix3x3_getRow(btMatrix3x3* c_this,int i){
	int c_arg_i=i;
	btVector3 const& c_out = c_this->getRow(c_arg_i);
	btVector3* wrap_out = (btVector3*)(&c_out);
	return wrap_out;
}

btMatrix3x3* bullet_btMatrix3x3_inverse(btMatrix3x3* c_this){
	btMatrix3x3 c_out = c_this->inverse();
	btMatrix3x3* wrap_out = new btMatrix3x3(c_out);
	return wrap_out;
}

btMatrix3x3* bullet_btMatrix3x3_scaled(btMatrix3x3* c_this,btVector3* s){
	btVector3 const& c_arg_s=(btVector3 const&)(*s);
	btMatrix3x3 c_out = c_this->scaled(c_arg_s);
	btMatrix3x3* wrap_out = new btMatrix3x3(c_out);
	return wrap_out;
}

void bullet_btMatrix3x3_serialize(btMatrix3x3* c_this,btMatrix3x3DoubleData* dataOut){
	btMatrix3x3DoubleData& c_arg_dataOut=(btMatrix3x3DoubleData&)(*dataOut);
	c_this->serialize(c_arg_dataOut);
}

void bullet_btMatrix3x3_serializeFloat(btMatrix3x3* c_this,btMatrix3x3FloatData* dataOut){
	btMatrix3x3FloatData& c_arg_dataOut=(btMatrix3x3FloatData&)(*dataOut);
	c_this->serializeFloat(c_arg_dataOut);
}

void bullet_btMatrix3x3_setEulerYPR(btMatrix3x3* c_this,double* yaw,double* pitch,double* roll){
	btScalar const& c_arg_yaw=(btScalar const&)(*yaw);
	btScalar const& c_arg_pitch=(btScalar const&)(*pitch);
	btScalar const& c_arg_roll=(btScalar const&)(*roll);
	c_this->setEulerYPR(c_arg_yaw,c_arg_pitch,c_arg_roll);
}

void bullet_btMatrix3x3_setEulerZYX(btMatrix3x3* c_this,double eulerX,double eulerY,double eulerZ){
	btScalar c_arg_eulerX=eulerX;
	btScalar c_arg_eulerY=eulerY;
	btScalar c_arg_eulerZ=eulerZ;
	c_this->setEulerZYX(c_arg_eulerX,c_arg_eulerY,c_arg_eulerZ);
}

void bullet_btMatrix3x3_setFromOpenGLSubMatrix(btMatrix3x3* c_this,double* m){
	btScalar const * c_arg_m=(btScalar const *)(void*)(m);
	c_this->setFromOpenGLSubMatrix(c_arg_m);
}

void bullet_btMatrix3x3_setIdentity(btMatrix3x3* c_this){
	c_this->setIdentity();
}

void bullet_btMatrix3x3_setRotation(btMatrix3x3* c_this,btQuaternion* q){
	btQuaternion const& c_arg_q=(btQuaternion const&)(*q);
	c_this->setRotation(c_arg_q);
}

void bullet_btMatrix3x3_setValue(btMatrix3x3* c_this,double* xx,double* xy,double* xz,double* yx,double* yy,double* yz,double* zx,double* zy,double* zz){
	btScalar const& c_arg_xx=(btScalar const&)(*xx);
	btScalar const& c_arg_xy=(btScalar const&)(*xy);
	btScalar const& c_arg_xz=(btScalar const&)(*xz);
	btScalar const& c_arg_yx=(btScalar const&)(*yx);
	btScalar const& c_arg_yy=(btScalar const&)(*yy);
	btScalar const& c_arg_yz=(btScalar const&)(*yz);
	btScalar const& c_arg_zx=(btScalar const&)(*zx);
	btScalar const& c_arg_zy=(btScalar const&)(*zy);
	btScalar const& c_arg_zz=(btScalar const&)(*zz);
	c_this->setValue(c_arg_xx,c_arg_xy,c_arg_xz,c_arg_yx,c_arg_yy,c_arg_yz,c_arg_zx,c_arg_zy,c_arg_zz);
}

void bullet_btMatrix3x3_setZero(btMatrix3x3* c_this){
	c_this->setZero();
}

btVector3* bullet_btMatrix3x3_solve33(btMatrix3x3* c_this,btVector3* b){
	btVector3 const& c_arg_b=(btVector3 const&)(*b);
	btVector3 c_out = c_this->solve33(c_arg_b);
	btVector3* wrap_out = new btVector3(c_out);
	return wrap_out;
}

double bullet_btMatrix3x3_tdotx(btMatrix3x3* c_this,btVector3* v){
	btVector3 const& c_arg_v=(btVector3 const&)(*v);
	btScalar c_out = c_this->tdotx(c_arg_v);
	double wrap_out = (c_out);
	return wrap_out;
}

double bullet_btMatrix3x3_tdoty(btMatrix3x3* c_this,btVector3* v){
	btVector3 const& c_arg_v=(btVector3 const&)(*v);
	btScalar c_out = c_this->tdoty(c_arg_v);
	double wrap_out = (c_out);
	return wrap_out;
}

double bullet_btMatrix3x3_tdotz(btMatrix3x3* c_this,btVector3* v){
	btVector3 const& c_arg_v=(btVector3 const&)(*v);
	btScalar c_out = c_this->tdotz(c_arg_v);
	double wrap_out = (c_out);
	return wrap_out;
}

btMatrix3x3* bullet_btMatrix3x3_timesTranspose(btMatrix3x3* c_this,btMatrix3x3* m){
	btMatrix3x3 const& c_arg_m=(btMatrix3x3 const&)(*m);
	btMatrix3x3 c_out = c_this->timesTranspose(c_arg_m);
	btMatrix3x3* wrap_out = new btMatrix3x3(c_out);
	return wrap_out;
}

btMatrix3x3* bullet_btMatrix3x3_transpose(btMatrix3x3* c_this){
	btMatrix3x3 c_out = c_this->transpose();
	btMatrix3x3* wrap_out = new btMatrix3x3(c_out);
	return wrap_out;
}

btMatrix3x3* bullet_btMatrix3x3_transposeTimes(btMatrix3x3* c_this,btMatrix3x3* m){
	btMatrix3x3 const& c_arg_m=(btMatrix3x3 const&)(*m);
	btMatrix3x3 c_out = c_this->transposeTimes(c_arg_m);
	btMatrix3x3* wrap_out = new btMatrix3x3(c_out);
	return wrap_out;
}

#ifdef __cplusplus
}
#endif
